/*
 * @lc app=leetcode.cn id=1089 lang=cpp
 *
 * [1089] 复写零
 */

// @lc code=start
#include<vector>
using namespace std;
class Solution 
{
public:
    void duplicateZeros(vector<int>& arr) 
    {
        int n=arr.size();
        int i=0,j=-1;
        //模拟找到最后一个复写的数字
        while(true)
        {
            if(arr[i]==0)
            {
                j+=2;
            }
            else
            {
                j++;
            }
            //注意这里走一步判断一步满足条件了
            //我们的i在加加确保i指向我们要进行复写
            //的最后一个数
            if(j>=n-1) break;
            i++;
        }
        //处理特殊情况如果最后我们要复写的数是0
        //我们的j指针会越界
        if(j>=n)
        {
            arr[j-1]=0;
            i--;
            j-=2;
        }
        while(i>=0)
        {
            if(arr[i]==0)
            {
                arr[j--]=0;
                arr[j--]=0;
                i--;
            }
            else
            {
                arr[j--]=arr[i--];
            }
        }

    }
};
// @lc code=end

